// 使用字面量进行申明
// let a: 10;
// a= 11;
// a = 值为string 或 number 联合类型
let a: string | number;
a = "hello";
a = 10;
/** 
 * ts类型
 * string
 * number
 * boolean
 * 字面量 例如：性别只有男和女
 * any 任意类型（关闭ts检查）
 * unknown 未知类型
 */
let b: string;
// 隐式声明类型为any 可破坏其他变量的类型, unknown类型不可破坏其他变量的类型
let e: unknown;
e = 10;
e = 'hello';
e = true;
// e可以赋值给任意变量
// if (typeof (e) === 'string') {
//     b = e;
// }

/** 
 * 语法
 * 变量 as 类型
 * <类型>变量
 */
// 类型断言 e就是字符串
b = e as string;
b = <string>b;

// void 用来表示空，没有返回值
function sayHello(): void {
    // return 123
    // 相当于 return; return null; return undefined;
    return;
}

// never 类型，表示永远不会有返回值的类型
function error(): never {
    // 报错
    throw new Error('error');
}